package top.yxqz.sprinmvc.msg.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.Mapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.Map;

/**
 * @author: 余小小
 * @date: 2023/5/4
 * @description： 1.request请求域
 * 2.session会话域
 * 3.application应用域
 */
@Controller
@RequestMapping("/msg")
public class MsgController {

    /**
     * 使用以前的方式来传递消息(HttpServletRequest)
     * uri: /msg/old
     *
     * @return
     */
    @GetMapping("/old")
    public String oldMethodRequest(HttpServletRequest request) {
        request.setAttribute("msg_old", "1.这是使用HttpServletRequest的方式");
        return "msg";
    }

    /**
     * 使用mav方式来传递消息(ModelAndView)
     * 1.设置数据
     * 2.设置视图名称，跳转的技术，还是使用是SpringMVC配置的视图解析器
     * uri: /msg/mav
     */
    @GetMapping("/mav")
    public ModelAndView mavRequest(ModelAndView mav) {
        mav.addObject("msg_mav", "2.这是使用ModelAndView的方式");
        mav.setViewName("msg");
        return mav;
    }

    /** 使用mode接口的方式
     * uri:/msg/model
     *
     * @param model
     * @return
     */
    @GetMapping("/model")
    public String modelRequest(Model model) {
        model.addAttribute("msg_model", "3.这是使用Model的方式");
        return "msg";
    }
    /**
     * 使用ModelMap方式
     */
    @GetMapping("/mp")
    public String modelMaperRequest(ModelMap modelMap) {
        modelMap.addAttribute("msg_mp", "4.这是使用ModelMap的方式");
        return "msg";
    }
    @GetMapping("/map")
    public String  mapRequest(Map<String,String> map){
        map.put("msg_map", "5.这是使用Map的方式");
        return "msg";
    }


    /**
     * 通过session域来传递消息
     */
    @GetMapping("/session")
    public String  msgSession(HttpSession session){
        session.setAttribute("msg_session", "6.Session会话域");
        return "msg";
    }
    /**
     * 通过application域来传递消息
     */
    @GetMapping("/app")
    public String  methodName(HttpSession session){
        ServletContext application = session.getServletContext();
        application.setAttribute("msg_app", "7.app应用域");
        return "msg";
    }

}
